/*线性表的静态分配空间的插入操作：i位置后面的元素都要继续往后移动*/
#include <stdlib.h>
#include <stdio.h>
#define MaxSize 10 //定义最大长度
typedef struct {
    int data[MaxSize];// 用静态的“数组”存放数据元素
    int length;//顺序表的当前长度
}SqList; //顺序表的类型定义
void InitList(SqList &L){
    for(int i=0;i<MaxSize;i++){
        L.data[i]=0;
    }
    L.length=0;//顺序表初始长度为0
}
// 插入元素
bool ListInsert(SqList &L,int i,int e){
    if(i<1||i>L.length+1){
        return false;
    }
    if(L.length>=MaxSize){
        return false;
    }
    for(int j=L.length;j>=i;j--){ //将第i个元素及之后的元素后移
        L.data[j]=L.data[j-1];
    }
    L.data[i-1]=e;//在位置i处放入e
    L.length++;//长度加1
    return true;
}
// 删除元素：
bool ListDelete(SqList &L,int i,int &e){
    if(i<1||i>L.length){
        return false;
    }
    e=L.data[i-1];
    for(int j=i;j<L.length;j++)
        L.data[j-1]=L.data[j];
    L.length--;
    return true;
}
int main(){
    SqList L;
    InitList(L);
    for(int i=0;i<8;i++){
        if(ListInsert(L,i,i+1)){
//            printf("insert[%d]-->%d success\n",i,i+1);
        }else{
//            printf("-----insert[%d] fail!!!\n",i);
        }
    }
//    ListInsert(L,3,3);
    // 删除元素
//    int e=-1;//用变量e吧删除的元素“带回来”
//    if(ListDelete(L,3,e))
//        printf("已经删除第3个元素，删除元素的值为%d\n",e);
//    else
//        printf("位序i不合法，删除失败\n");

    for(int i=0;i<MaxSize;i++){
        printf("data[%d]=%d\n",i,L.data[i]);
    }
    return 0;
}